Neste artigo, compartilharei como você pode alterar o nível de log do seu aplicativo sem reiniciá-lo.
Os níveis de log são geralmente considerados em ordem de importância: ative os níveis "sem importância" no desenvolvimento (aviso, depuração e similares), mas ative apenas os níveis "mais importantes" (aviso, erro, etc.) em produção, onde recursos como tempo de CPU e espaço em disco são preciosos.
Mas e se seu aplicativo estiver sendo executado no nível de ERRO e você começar a enfrentar muitos problemas, mas não conseguir descobrir isso a partir dos logs de nível de ERRO, alterar o nível de log por meio da reimplantação do aplicativo consumirá muito tempo e recursos.
Além disso, executar seu aplicativo no nível INFO ou DEBUG na produção gerará um grande número de logs que podem sobrecarregar o sistema de registro, levando a um aumento nas operações de E/S e no consumo de recursos.
Para nos resgatar desses problemas, GoFr - The Ultimate Golang Framework fornece uma maneira segura de alterar o nível de log sem reiniciar seu aplicativo.
Para alterar o nível de log, qualquer aplicativo GoFr requer a seguinte configuração:
REMOTE_LOG_URL=(e.g., https://log-service.com/log-levels?id=1)
GoFr busca o endpoint fornecido a cada 15 segundos por padrão para obter o nível de log mais recente. Esse intervalo pode ser aumentado ou diminuído adicionando a seguinte configuração.
REMOTE_LOG_FETCH_INTERVAL=(default: 15)
GoFr requer a resposta da URL no seguinte formato com dois campos obrigatórios:
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
Vamos criar o serviço de nível de log que fornecerá o nível de log para nosso aplicativo.
Usarei GoFr para criar o serviço, consulte a documentação para saber mais.
Usaremos o MySQL como banco de dados. Para adicionar o MySQL, adicione as seguintes configurações no arquivo .env no diretório configs.
DB_HOST=localhost DB_USER=root DB_PASSWORD=password DB_NAME=log-level DB_PORT=2001 DB_DIALECT=mysql
Para executar o contêiner docker MySQL, execute o seguinte comando
docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
Vamos adicionar o arquivo main.go com as migrações para criar a tabela e usaremos o recurso AddRESTHandler para registrar a rota.
main.go
package main import ( "gofr.dev/pkg/gofr" "gofr.dev/pkg/gofr/migration" ) const createTable = `CREATE TABLE level ( id INT PRIMARY KEY, service_name VARCHAR(255) NOT NULL, log_level VARCHAR(50) NOT NULL ); ` func createTableLevel() migration.Migrate { return migration.Migrate{ UP: func(d migration.Datasource) error { _, err := d.SQL.Exec(createTable) if err != nil { return err } return nil }, } } type Level struct { ID int `json:"id"` ServiceName string `json:"serviceName"` LogLevel string `json:"logLevel"` } func (u *Level) RestPath() string { return "level" } func main() { app := gofr.New() app.Migrate(map[int64]migration.Migrate{1: createTableLevel()}) err := app.AddRESTHandlers(&Level{}) if err != nil { app.Logger().Fatalf("Failed to register routes for level struct: %v", err) } app.Run() }
Após executar o Log Service, veremos os seguintes logs:
Temos todas as rotas REST cadastradas.
Para criar um serviço envie a seguinte solicitação:
curl --location 'localhost:8000/level' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"INFO", "serviceName":"gofr-app" }'
Para atualizar o nível de log envie a seguinte solicitação:
curl --location --request PUT 'localhost:8000/level/1' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"DEBUG", "serviceName":"gofr-app" }'
Para obter o nível de log, envie a seguinte solicitação:
curl --location 'localhost:8000/level/1'
A mesma URL será usada nas configurações da nossa aplicação cujo nível de log deve ser alterado remotamente.
Ao usar o recurso de alteração remota do nível de registro do GoFr, você obterá benefícios como:
Ajustes fáceis:
Modifique o nível de log a qualquer momento sem reiniciar o aplicativo. Isso é especialmente útil durante a solução de problemas.
Visibilidade aprimorada:
Mude facilmente para um nível de registro mais detalhado (por exemplo, DEBUG) para obter insights mais profundos sobre problemas específicos e, em seguida, volte para um nível menos detalhado (por exemplo, INFO) para operação regular.
Performance melhorada:
A geração de um grande número de logs pode sobrecarregar o sistema de log, levando ao aumento das operações de E/S e do consumo de recursos. A mudança para o nível de aviso ou erro reduz o número de logs e melhora o desempenho, além de REDUZIR O CUSTO DA NUVEM.
Apoie GoFr dando uma ⭐estrela: https://github.com/gofr-dev/gofr
Além disso, você tem acesso ao endpoint público gratuito para exportar e visualizar os rastreamentos do seu aplicativo @ tracer.gofr.dev.
Para habilitá-lo, adicione a seguinte configuração em seu arquivo .env
TRACE_EXPORTER=gofr
Outros benefícios:
Se você contribui para o GOFR no desenvolvimento ou na redação de artigos. Você pode obter brindes(camisetas, adesivos) gratuitamente preenchendo o formulário apresentado no GitHub Readme (na parte inferior).
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3